История первая
История
вторая
История третья
Неуловимый
Джо
Беззащитный Unix
Самые важные слабости Unix
Плохое
администрирование
Повторно используемые и
плохие пароли
Дырки в ftp- и
HTTP-серверах и CGI скриптах
Проблемы с NFS/NIS
Программы
с переполняющимися буферами
Неправильная
синхронизация событий
Ошибки в SUID
программах
Самая безопасная
система
Выбираем пожарные
стенки
Куда идти дальше?
Меня часто спрашивают, насколько актуальна проблема безопасности в Internet. Приведу несколько занятных примеров, сопроводив их поучительной моралью для солидности.
Вскоре я окончательно убедился, что у нас завелся незванный гость. После этого, мы сменили пароль и я провел небольшое расследование, в результате чего выяснился круг интересов взломщика и основные направления его компьютерных интересов, способ его входа в компьютерную сеть (через модемный вход на университетском компьютере), а также имена некоторых его друзей по IRC. С этой информацией мы пошли к администратору всей местной сети, которая сразу же меня перебила - "Зачем вы мне все это рассказываете? Ведь я же не детектив!" Совершенно справедливое замечание. Она действительно не детектив и, как следствие, не системный администратор.
Как оказалось впоследствии, по Internet ходили списки с логинами и паролями многих биофизиков, пользующихся этим компьютером, и только ленивый там не пасся.
Из этих историй можно сделать несколько полезных выводов.
Между тем, если вы тот самый знаменитый Неуловимый Джо, то для защиты от бандитов вам достаточно дешевого лассо и крепких дверей с навесным замком. Совершенно необязательно строить крепость и заливать водой рвы для защиты продуктовой лавки. Однако же, если вы собираетесь перевозить достояние Республики в почтовом дилижансе или в поезде, стоит принять более серьезные меры предосторожности. Для защиты Неуловимого Джо вполне сойдут старые добрые пакетные фильтры на вашем маршрутизаторе в сочетании с толковым администратором. А для действительно надежной защиты вам не отделаться лишь одним самым замечательным продуктом с импортным названием "Firewall" на коробке.
Мораль - оцените степень риска, изучите вашу сеть, разработайте политику защиты, заручитесь поддержкой менеджеров и после этого срокойно идите на противопожарный рынок, прихватив с собой десяток-другой килобаксов. Чем вы ценнее для окружающих и чем меньше вы знаете про Internet тем больше придется выложить.
Как справедливо заметил один мой друг, основная проблема Unix состоит в том, что он делает то, что ему говорят. Это все тот же принцип WYSIWYG - What You Say Is What You Get.
Unix создавался по образу абсолютной монархии с формальными признаками демократии. Простые подданные системы (юзеры) имеют достаточно мало полномочий для того, чтобы нанести какой-либо реальный вред. Политические партии (группы) подданных имеют несколько больше прав и полномочий и у неискушенного туриста может создаться впечатление, что именно они и руковолят системой. Однако, на практике, все реальные и серьезные решения принимает абсолютный монарх, мистер Чарли Рут (Mr. Charlie Root). Только ему доступны все комнаты дворца, королевская печать, государственные архивы и королевская казна. Все подданные и вся жиззнь королевства подвластны ему, он волен заходить в любой дом, читать все документы и может по своему усмотрению убить или помиловать любого подданного или плод его деятельности - процесс (особенно это неприятно, когда подданный, решив, что процесс пошел, успокаивается и идет спать).
Однако, видимо опасаясь государственного переворота, мистер Рут тщательно скрывается от своих подданных. Для того, чтобы воспользоваться своими полномочиями ему требуется предъявить министру внутренних дел господину /etc/passwd свой паспорт для проверки. В паспорте содержится некое секретное слово (и в условном месте, известном господину министру, припрятано две крупинки соли). Если все нормально, предъявитель паспорта получает знак монархической власти (uid 0). К сожалению, оказалось, что при современном развитии печатного дела паспорт можно подделать. Взломщики выдумали немало способов подглядывать за секретной процедурой показа паспорта. В принципе, это похоже на кражу номеров кредитных телефонных карточек - в американских аэропортах пасутся специальные прохожие, невзначай подсматривающие за набором номера на телефоне. Призом для них является право на бесплатный (за счет клиента) звонок любимой тетушке на Бермуды. Призом же для удачливого вора, подделавшего пароль, является полный контроль над могущественной империей Unix.
Так как его Рутовское Величество часто занят делами и его трудно найти, для вершения государственных дел у него есть штат доверенных лиц. Исполняющий обязанности в Unix называюется Сюид (SUID), а исполняющий обязанности Монарха называется Сюид Рут (SUID root). Обычно Сюид Рут имеет весьма ограниченный круг обязанностей и не представляет серьезной опасности для безопасности. Однако некоторые недостойные умудряются использовать выданный им для отправления обязанностей монархический знак (uid 0) для непредусмотренных действий и могут, в принципе, воспользоваться им для полного захвата власти в стране. Особенно опасны Сюид Рут, имеющие доступ к акциям местных нефтяных компании системы Shell. Сюид, получивший контроль над Shell, по-сути неотличим от реального монарха. Поэтому господа Сюид являются лакомой добычий для воров и международных шпионов, под видом гостей проникающих в страну.
Для наблюдения за делами в королевстве и исполнения хозяйственных дел господин Чарли Рут обычно нанимает бригаду демонов, которые от его имени незаметно вершат свои демонические дела. Именно им мы обязаны периодическим шуршанием дисковых головок в моменты, когда мы смотрим на экран и не проявляем никакой видимой активности.
Исторически сложилось, что на границе страны и в ее таможенной службе Интернетовском Таможенном Департаменте ИнеТД (inetd) служат доверенные лица, имеющие значок (suid 0). Им разрешается пропускать туристов и товары через один из государственных 1024 портов (в стране Unix есть еще и множество частных портов, не контролируемых государством. Любой подданный имеет право открыть свой частный порт, однако все государственные порты строго контролируются).
По межгосударственному соглашению, заключенному когда-то в Беркли между дружественными Unix монархиями, транспорт, пришедший из государственных портов других стран, пользуется особенным доверием и пропускается без особенного таможенного контроля. Соглашение было выработано в период существования нескольких сильных Империй, которые хорошо знали друг друга. Теперь же всякий, без особого труда может завести себе маленькую персональную империю, владеть в ней всеми портами и отправлять контрабанду через любой из них. Более того, такие мелкие империи даже не обязаны иметь конституционное монархическое устройство Unix. Чаще всего они имеют довольно мягкий режим управления, позволяющий любому проходимцу прикинуться Рутом на час. Более того, террористы научились поддерживать дорожные документы и часто даже невозможно установить, откуда прибыл груз. Таможенные соглашения (r-commands), заключенные в Беркли оказались совершенно неприемлемыми для современного мира мелких государств с мягким управлением. Поэтому, мудрые руководители игнорируют соглашения и весьма тщательно проверяют весь груз, проходящий через порты.
К сожалению, общий принцип гласит, что чем система защищеннее, тем менее удобно ей пользоваться. А так как большинство покупателей компьютеров заботит прежде всего удобство, безопасность неминуемо отодвигается на задний план.
На мой взгляд, любой администратор может существенно повысить безопасность своего Unix, если
Как ни странно, придумывание пароля является весьма сложной задачей для любого пользователя компьютера. Вспомните, сколько раз вы в качестве пароля выбирали слова "aaa", "qqq", "123456", "password" и ваше имя! Те, у кого развита фантазия пишут имя своей любимой девушки. Все эти пароли очень плохи и регулярно раскалываются. Хороший пароль не должен быть никаким осмысленным словом никакого языка, должен обязательно содержать и большие и маленькие буквы, какие-нибудь специальные символы, достаточно хорошо запоминаться (чтобы его не пришлось записывать и приклеивать на монитор или, того хуже, напряженно пытаться вспомнить новый пароль для того, чтобы сделать срочную работу) и быстро набираться на клавиатуре (это защита от любителей смотреть через плечо). Более того, он должен регулярно обновляться (при этом нельзя использовать подержанные пароли из прошлой жизни). Согласитесь - задачка не из легких. Но постарайтесь - плохой пароль - приглашение зайти в гости, а хороший пароль может стоить брандмауера за 10 тыс. долл.
Как показывает практика, все эти соображения не убеждают большинство пользователей и они все равно придумывают пароль "qqq". Для борьбы с плохими паролями придумана программа "Crack" Алекса Муффета (ftp://info.cert.org/pub/%20tools/crack/crack_4.1-tar.Z), весьма эффективно раскалывающая пароли. Ей пользуются и администраторы и взломщики, постарайтесь, чтобы ваш пароль не был ей взломан. Но будьте осторожны, если вы работаете на западную компанию. Вы можете попасть в историю, аналогичную той, в которую попал известный программист и соавтор книг про Perl Рэндэл Шварц, работавший системным администраторов в фирме Intel. Он периодически запускал crack для проверки паролей пользователей. Руководство Intel обвинило его в несанкционированном доступе к информации и пожаловалось в ФБР. В результате он был обвинен по уголовной статье, посажен на три месяца в тюрьму и потерял все свои сбережения. Системный администратор - весьма опасная профессия.
Легендарный Кевин Митник использовал очень простой способ отгадывания паролей - он просто звонил пользователям компьютеров и честно говорил им, что ему нужен пароль для какой-нибудь придуманной цели. Обычно он его получал. Другой популярный способ - послать письмо от имени администратора с требованием сменить пароль на указанный в письме. Психология - весьма действенное средство в руках профессионала.
Куда более серьезная проблема с паролями состоит в том, что они путешествуют по сети в незашифрованном виде и их очень легко перехватить по дороге. Поэтому, сейчас стали использовать одноразовые пароли. Идея состоит в том, что каждый раз для входа в систему используется новый пароль, который практически невозможно предсказать постороннему взломщику. Есть свободная програмная реализация одноразовых паролей (S/Key) и несколько коммерческих програмно-аппаратных реализаций, которые пока что не добрели до России. S/Key интегрирован в некоторые системы, например, во FreeBSD.
За пару дней существования моего HTTP-сервера к нему несколько раз обратились с просьбой прислать файл /etc/passwd (старые версии Apache содержали CGI-скрипт "phf", который позволял прочитать любой файл в системе). По случайности, у меня оказалась свежая версия демона и фокус не сработал.
Несколько советов Web-администраторам:
Если вы передаете данные пользователя внешним программам, проверяйте их
на наличие опасных символов, имеющих специальную семантику для этих программ
(например, командные интерпретаторы хорошо переваривают символы `<>;").
Аналогичные проблемы возникают и с FTP-серверами. Неправильно настроенный, или содержащий ошибку FTP-сервер позволяет читать и/или писать произвольный файл в системе. А если этот сервер работает на системе DOS, OS/2 или Windows"95, подключенной к локальной сети или на машине, использующей NFS, то взломщик может получить доступ ко всей вашей сети. Постарайтесь использовать максимально простой FTP демон, в котором отключены все "бантики" и который позволяет только анонимным пользователям забирать (но не класть) файлы.
Общий принцип безопасности, на мой взгляд, состоит в том, что нельзя гарантировать безопасность на машине, на которой существует любая форма активности внешних пользователей - HTTP, FTP или терминальный сервер. Такие сервисы следует выносить за пределы вашей локальной сети и особенно хорошо администрировать. В особенности опасен HTTP или FTP сервер на вашем брандмауэре.
Если вы опытный Unix-хакер, то смело собирайте свой собственный бастион на базе бесплатного FreeBSD или коммерческой BSDI/OS и свободных программ (tcp_wrappers, TIS Firewall Toolkit, tripwire, COPS, и т.д.). Набьете руку, получите удовольствие и будете знать что происходит. Но в случае взлома будьте готовы получить по заслугам.
Проще купить готовый продукт - с ним меньше ответственности и хлопот. Купил, распаковал, включил - и безопасно вкушай прелести Internet! Однако продуктов много и это затрудняет жизнь. Как выбрать из них наилучший?
На выставке Windows Expo"96 меня и представителя Micrisoft застал в коридоре посетитель и стал спрашивать - какой продукт лучше - DEC Firewall для NT или Microsoft Proxy - объявленный, но пока не существующий продукт. Мне лично кажется, что существующий продукт всегда лучше объявленного, но недоступного.
Для того, чтобы сравнивать, необходимо выработать критерии - что значит "лучше и хуже". В противном случае развяжется очередная религиозная война, похожая на бушевавшие когда-то горячие войны о том, какая ОС и какой редактор лучше.
Один из посетителей выставки предложил считать лучшим тот продукт, который меньше взламывали. Хорошая идея, но брандмауэр, который один раз взломали, является дорогой игрушкой. Это похоже на математическую теорему - одного контрпримера достаточно для опровержения и не поможет самое красивое доказательство. Самый лучший пользовательский интерфейс не перекроет одной маленькой дырки в защите. Самое главное требование к системе защиты - она должна надежно и безопасно защищать при любых условиях.
Если защитное устройство выходит из строя, оно должно закрывать весь доступ в вашу сеть, а не открывать его. Маркус Ранум сравнивает Firewall с воротами и опускаемым мостом замка. Когда перетирается веревка, мост опускается, открывая проход. А входные ворота, оставшиеся без крепежа, проседают и никого не впускают. Поэтому смотрите, как ведет себя продукт в трудных ситуациях.
Большинство систем защиты делятся на два класса. Пакетные фильтры, которые проверяют заголовки IP/TCP/UDP пакетов и принимают решение, исходя из адресов и протоколов. Proxy-серверы становятся между клиентом и серверам и пропускают через себя все прикладные запросы. Сравнивать эти два класса устройств непросто, потому что они работают на разных уровнях. Обычно бастионы с proxy-серверами надежнее, но менее удобны. Лучше всего использовать сочетание тех и других. Там где можно используйте пакетные фильтры, но основные сервисы пропускайте через proxy-серверы.
Большинство обзоров по брандмауэрам посвящают основную часть описания пользовательскому интерфейсу. В большинстве случаев брандмауэр - черный ящик, который, будучи настроенным стоит в хорошо закрытом месте и к нему не подходит никто, кроме специально обученных администраторов. Хорошо, если интерфейс красивый и удобный, но удобство внесения изменений в конфигурацию может спровоцировать пользователей на ослабление защиты. Поэтому, удобный интерфейс может быть и недостатком.
Соберите побольше информации и подпишитесь на firewalls@GreatCircle.com. Пощупайте продукт руками. Попробуйте его в действии. И не верьте рекламе - настоящий специалист по безопасности не доверяет никому!